package com.reform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.reform.pojo.common.Dealt;
import com.reform.pojo.project.MyProjectInfo;
import com.reform.pojo.project.Project;
import com.reform.pojo.project.ViewProject;
import com.reform.res.Result;

import javax.servlet.http.HttpServletRequest;
import java.sql.SQLException;
import java.util.List;

/**
 * <p>
 * VIEW 服务类
 * </p>
 *
 * @author mortale
 * @since 2021-07-21
 */
public interface IViewProjectService extends IService<ViewProject> {

    /**
     * 获取所有项目信息
     *
     * @return
     * @throws SQLException
     */
    Result getAllProject() throws SQLException;

    /**
     * 根据项目id获取项目信息
     *
     * @param proId
     * @return
     * @throws SQLException
     */
    Result getProjectById(String proId) throws SQLException;

    /**
     * 根据批次id获取项目信息
     *
     * @return
     * @throws SQLException
     */
    Result getProjectByBatchId(String batchId) throws SQLException;

    /**
     * 根据批次id获取项目pro_id
     *
     * @return
     * @throws SQLException
     */
    List<String> getProIdByBatchId(String batchId) throws SQLException;

    /**
     * 获取当前教师最近一次教学工作简历
     *
     * @param batch_id
     * @return
     * @throws SQLException
     */
    Result getRecentProject(String batch_id, HttpServletRequest request) throws SQLException;

    /**
     * 更新rides
     */
    void updateRides();

    /**
     * 创建项目
     *
     * @param project
     * @param projectMembers
     * @param projectSearchings
     * @param projectTeachings
     * @return
     * @throws SQLException
     */
    Result creatProjects(Project project, String projectMembers, String projectSearchings, String projectTeachings) throws SQLException;

    /**
     * 删除项目
     *
     * @param proId
     * @return
     * @throws SQLException
     */
    Result deleteProject(String proId) throws SQLException;

    /**
     * 修改项目信息
     *
     * @param project
     * @param projectMembers
     * @param projectSearchings
     * @param projectTeachings
     * @return
     * @throws SQLException
     */
    Result updateProject(Project project, String projectMembers, String projectSearchings, String projectTeachings) throws SQLException;


    /**
     * 查询批次下最大主持数
     *
     * @param batch_id
     * @return
     */
    Result selectMaxHost(String batch_id);

    /**
     * 查询批次下最大参与数
     *
     * @param batch_id
     * @return
     */
    Result selectMaxParticipants(String batch_id);

    /**
     * 获得该批次下所有项目的类别信息
     *
     * @param batch_id
     * @return
     */
    Result selectClassificationByBatchId(String batch_id);

    /**
     * 根据gh获取该教师主持的项目信息
     *
     * @param gh 教师工号
     * @return
     * @throws SQLException
     */
    Result getProjectsByGH(String gh) throws SQLException;

    /**
     * 根据gh查询该教师主持的项目信息
     * 该操作可以获得批次编号、项目名称、项目编号、项目级别、项目当前状态
     *
     * @param gh 教师工号
     * @return 简单项目信息数据列表 List<MyProjectInfo>
     */
    List<MyProjectInfo> getSimplifyProjectsByGH(String gh, Integer ranking);

    /**
     * 根据批次id获取简单项目信息
     * @param batch_id 批次id
     * @return
     */
    Result getSimplifyProjectByBatchId(String batch_id,String pro_approval);

    /**
     * 获取所有延期简单项目信息
     * @return
     */
    Result getAllDelayProject();

    /**
     * 根据延期编号获取所有延期简单项目信息
     * @param proApprovals 项目状态
     * @return
     */
    Result getAllDelayProjectById(String proApprovals);

    /**
     * 获取该教师被退回的项目
     * @param gh
     * @return
     */
    List<Dealt> getTeacherDealt(String gh);

    /**
     * 根据阶段id获取简单项目信息
     * @param phaseId
     * @return
     */
    Result getSimplifyProjectByPhaseId(String phaseId);
}
